package com.netty.study.example;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;

public class TimeServer {

    private int port;

    public TimeServer(int port){
	this.port = port;
    }

    public void run()throws Exception{
	EventLoopGroup bossGroup = new NioEventLoopGroup();
	EventLoopGroup workerGroup = new NioEventLoopGroup();
	
	try{
	    //配置
	    ServerBootstrap bootstrap = new ServerBootstrap();
	    bootstrap.group(bossGroup,workerGroup)
	    .channel(NioServerSocketChannel.class)
	    .childHandler(new ChannelInitializer<SocketChannel>() {
		@Override
		protected void initChannel(SocketChannel channel) throws Exception {
		    channel.pipeline().addLast(new TimeHttpHandler());
		}

	    })
	    .option(ChannelOption.SO_BACKLOG,128)
	    .childOption(ChannelOption.SO_KEEPALIVE,true);
	    ChannelFuture f = bootstrap.bind(port).sync();
	    f.channel().closeFuture().sync();

	}finally{
	    bossGroup.shutdownGracefully();
	    workerGroup.shutdownGracefully();
	}
	
    }

    public static void main(String[] args) throws Exception {

	int port ;

	if(args.length >0 ){
	    port = Integer.parseInt(args[0]);
	}else{
	    port = 8080;
	}

	new TimeServer(port).run();

    }
}
